/**
 * Vue核心定义文件
 * 
 * 将状态初始化  数据定义  事件相关  生命周期  render合并拆成不同组件
 */

import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

function Vue (options) {   // 找到了
  // 保证无法直接通过Vue()去调用，只能通过new的方式去创建实例
  if (process.env.NODE_ENV !== 'production' &&
  !(this instanceof Vue)
) {
  warn('Vue is a constructor and should be called with the `new` keyword')
}
  // 初始化调用_init方法
  this._init(options)
}
/**
 * 
 * Vue将它的功能  拆分成了几个插件
 */

initMixin(Vue)  // 状态data初始化  生命周期初始化  事件初始化 初始化渲染   调用beforeCreate钩子  初始化Inject注入  初始化Provide 调用create钩子等
stateMixin(Vue) // 定义原型上跟数据相关的属性方法
eventsMixin(Vue)  // 事件相关的方法
lifecycleMixin(Vue) // 声明周期
renderMixin(Vue) // 渲染render函数

export default Vue
